/**
 * 实现一个 thunk 中间件
 *
 *  功能是：让 dispatch(action) 传递的 action 可以是一个函数
 *
 *  前置知识点：
 *    1. action 只能是一个 普通对象，如果传递一些花里胡哨的东西，会报错的。
 *      如果期望 action 可以传递其他类型的化，需要自行弄中间件来处理（将action处理成普通对象）
 */
export default (storeAPI: any) => (next: any) => (action: any) => {
  console.log("thunk", action);
  // 判断当前 action 是否是一个函数类型的 action
  if (typeof action === "function") {
    // 函数类型的 action, 直接调用该函数
    action(storeAPI.dispatch);
  } else {
    // 普通类型的 action, 放行
    next(action);
  }
};
